from contextlib import contextmanager


@contextmanager # 在函数里面使用yield关键字并且使用@contextmanager那么创建的对象就是上下文管理器
def my_open(path, mode):
    try:
        print("上文")
        f = open(path, mode)
        # 返回文件对象不要使用return，需要使用yield关键字，yield可以返回多次值，return只能返回一次
        # yield之前的代码好比是上文方法
        yield f
        # yield下面的方法好比是下文方法
    except Exception as e:
        print(e)
    finally:
        f.close()
        print("下文")


with my_open("log.txt", "r") as f:
    data = f.read()
    print(data)
